﻿Public Class Cseparacion

    Public Shared Function AñadirSeparacion(ByVal descEmpresa As String, _
                                            ByVal pCliente As Ecliente, _
                                            ByVal pApoderado As Ecliente, _
                                            ByVal pConyugue As Ecliente, _
                                            ByRef idSeparacionVenta As Integer, _
                                            ByVal pSeparacionVenta As EseparacionVenta, _
                                            ByVal pSeparacionVentaDetalle As List(Of EseparacionVentaDetalle), _
                                            ByVal pAhorroPrevios As List(Of EahorroPrevio), _
                                            ByVal pFinanciamineoCtaInicial As List(Of EseparacionVentaDetallePagos), _
                                            ByVal pFinanciamineoSaldo As List(Of EseparacionVentaDetallePagos), _
                                            ByVal pSeguimientoCreditoHip As EseguimientoCreditoHip, _
                                            ByVal pCoopropietario As List(Of Ecliente), _
                                            ByVal pRepresentante As List(Of Ecliente), _
                                            ByVal CodigoSeparacion As String) As Boolean
        Dim resultado As Boolean = False

        Dim options As New TransactionOptions
        options.IsolationLevel = Transactions.IsolationLevel.ReadCommitted
        options.Timeout = New TimeSpan(0, 2, 0)

        Using scope As New TransactionScope(TransactionScopeOption.Required, options)
            Try
                Dim idCliente As Int32 = 0
                Dim resultadoCliente As Boolean = Rcliente.Añadir(descEmpresa, pCliente, idCliente)

                Dim idApoderado As Int32 = 0
                If Not pApoderado Is Nothing Then
                    Dim resultadoApoderado As Boolean = Rcliente.AñadirApoderado(descEmpresa, pApoderado, idApoderado, idCliente)
                End If

                Dim idConyugue As Int32 = 0
                If Not pConyugue Is Nothing Then
                    Dim resultadoConyugue As Boolean = Rcliente.AñadirConyugue(descEmpresa, pConyugue, idConyugue, idCliente)
                End If

                Dim grabaCoopropietario As Boolean = False
                If Not pCoopropietario Is Nothing Then
                    For Each pc As Ecliente In pCoopropietario
                        Dim idCoopropietario As Int32 = 0
                        'pc.idRelacion = idCliente
                        grabaCoopropietario = Rcliente.AñadirCoopropietario(descEmpresa, pc, idCoopropietario, idCliente)
                    Next
                End If

                Dim grabaRepresentante As Boolean = False
                If Not pRepresentante Is Nothing Then
                    For Each pr As Ecliente In pRepresentante
                        Dim idRepresentante As Int32 = 0
                        'pc.idRelacion = idCliente
                        grabaRepresentante = Rcliente.AñadirRepresentante(descEmpresa, pr, idRepresentante, idCliente)
                    Next
                End If
                pSeparacionVenta.Ecliente = New Ecliente
                'pSeparacionVenta.idCliente = idCliente
                pSeparacionVenta.nroDocumento = pCliente.nroDocumento
                Dim resultadoSeparacion As Boolean = RseparacionVenta.AñadirSeparacion(descEmpresa, pSeparacionVenta, idSeparacionVenta, CodigoSeparacion)

                Dim resultadoSeparacionDetalle As Boolean = False
                For Each pd As EseparacionVentaDetalle In pSeparacionVentaDetalle
                    pd.idSeparacionVenta = idSeparacionVenta
                    resultadoSeparacionDetalle = RseparacionVentaDetalle.AñadirSeparacion(descEmpresa, pd)
                Next
                Dim resultadoSeparacionAhorroPrevio As Boolean = False
                If Not pAhorroPrevios Is Nothing Then
                    For Each pd As EahorroPrevio In pAhorroPrevios
                        pd.idSeparacionVenta = idSeparacionVenta
                        resultadoSeparacionAhorroPrevio = RahorroPrevio.Añadir(descEmpresa, pd)
                    Next
                End If

                Dim resultadoSeparacionPagosCtaInicial As Boolean = False
                Dim TotalMontoI As Double = 0.0
                For Each pd0 As EseparacionVentaDetallePagos In pFinanciamineoCtaInicial
                    TotalMontoI = TotalMontoI + pd0.cuota
                Next
                For Each pd As EseparacionVentaDetallePagos In pFinanciamineoCtaInicial
                    If pd.idMotivo = 1 Then
                        'If pd.montoPago = pd.cuota * pFinanciamineoCtaInicial.Count Then '** Codigo para comprobar si el Monto de pago es igual a la suma de cuotas
                        If Math.Abs(pd.montoPago - TotalMontoI) < 0.01 Then '** Codigo para comprobar si el Monto de pago es igual a la suma de cuotas
                            pd.idSeparacionVenta = idSeparacionVenta
                            resultadoSeparacionPagosCtaInicial = RseparacionVentaDetallePagos.AñadirSeparacion(descEmpresa, pd)
                        Else
                            pFinanciamineoCtaInicial = Nothing
                            For Each pds As EseparacionVentaDetallePagos In pFinanciamineoCtaInicial

                            Next
                        End If
                    End If
                Next

                Dim resultadoSeparacionPagosSaldo As Boolean = False
                Dim TotalMontoF As Double = 0.0
                For Each pd0 As EseparacionVentaDetallePagos In pFinanciamineoSaldo
                    TotalMontoF = TotalMontoF + pd0.cuota
                Next
                For Each pd As EseparacionVentaDetallePagos In pFinanciamineoSaldo
                    If pd.idMotivo = 2 Then
                        'If pd.montoPago = pd.cuota * pFinanciamineoSaldo.Count Then '** Codigo para comprobar si el Monto de pago es igual a la suma de cuotas
                        If Math.Abs(pd.montoPago - TotalMontoF) < 0.01 Then '** Codigo para comprobar si el Monto de pago es igual a la suma de cuotas
                            pd.idSeparacionVenta = idSeparacionVenta
                            resultadoSeparacionPagosSaldo = RseparacionVentaDetallePagos.AñadirSeparacion(descEmpresa, pd)
                        Else
                            pFinanciamineoSaldo = Nothing
                            For Each pds As EseparacionVentaDetallePagos In pFinanciamineoSaldo

                            Next
                        End If
                    End If
                Next
                If pSeguimientoCreditoHip IsNot Nothing Then
                    pSeguimientoCreditoHip.idSeparacionVenta = idSeparacionVenta
                    Dim resultadoSeguimientoCreHip As Boolean = RseguimientoCreditoHip.EditarInstanciasCreditoHip(descEmpresa, pSeguimientoCreditoHip)
                End If

                If resultadoCliente AndAlso _
                   resultadoSeparacion AndAlso _
                   resultadoSeparacionDetalle AndAlso _
                   resultadoSeparacionPagosCtaInicial AndAlso _
                   resultadoSeparacionPagosSaldo Then
                    resultado = True
                End If
                scope.Complete()
            Catch ex As Exception
                Throw
            End Try
        End Using
        Return resultado
    End Function
    
    Public Shared Function EditarSeparacion(ByVal descEmpresa As String, _
                                            ByRef idSeparacionVenta As Integer, _
                                            ByVal pSeparacionVenta As EseparacionVenta, _
                                            ByVal pSeparacionVentaDetalle As List(Of EseparacionVentaDetalle), _
                                            ByVal pAhorroPrevios As List(Of EahorroPrevio), _
                                            ByRef pSeparacionVentaPagos As EseparacionVentaDetallePagos, _
                                            ByVal pFinanciamineoCtaInicial As List(Of EseparacionVentaDetallePagos), _
                                            ByVal pFinanciamineoSaldo As List(Of EseparacionVentaDetallePagos), _
                                            ByVal pSeguimientoCreditoHip As EseguimientoCreditoHip) As Boolean
        Dim resultado As Boolean = False

        Dim options As New TransactionOptions
        options.IsolationLevel = Transactions.IsolationLevel.ReadCommitted
        options.Timeout = New TimeSpan(0, 2, 0)

        Using scope As New TransactionScope(TransactionScopeOption.Required, options)
            Try
                Dim resultadoSeparacion As Boolean = RseparacionVenta.EditarSeparacion(descEmpresa, idSeparacionVenta, pSeparacionVenta)

                Dim resultadoSeparacionDetalle As Boolean = False
                For Each pd As EseparacionVentaDetalle In pSeparacionVentaDetalle
                    pd.idSeparacionVenta = idSeparacionVenta
                    pd.tpoGestion = 1
                    resultadoSeparacionDetalle = RseparacionVentaDetalle.Editar(descEmpresa, pd)
                Next

                Dim resultadoSeparacionAhorroPrevio As Boolean = False
                If Not pAhorroPrevios Is Nothing Then
                    RahorroPrevio.Eliminar(descEmpresa, idSeparacionVenta, pAhorroPrevios.ElementAt(0))
                    For Each pd As EahorroPrevio In pAhorroPrevios
                        pd.idSeparacionVenta = idSeparacionVenta
                        resultadoSeparacionAhorroPrevio = RahorroPrevio.Añadir(descEmpresa, pd)
                    Next
                End If

                RseparacionVentaDetallePagos.Eliminar(descEmpresa, pSeparacionVentaPagos)
                Dim resultadoSeparacionPagosCtaInicial As Boolean = False
                For Each pd As EseparacionVentaDetallePagos In pFinanciamineoCtaInicial
                    If pd.idMotivo = 1 Then
                        pd.idSeparacionVenta = idSeparacionVenta
                        resultadoSeparacionPagosCtaInicial = RseparacionVentaDetallePagos.AñadirSeparacion(descEmpresa, pd)
                    End If
                Next

                Dim resultadoSeparacionPagosSaldo As Boolean = False
                For Each pd As EseparacionVentaDetallePagos In pFinanciamineoSaldo
                    If pd.idMotivo = 2 Then
                        pd.idSeparacionVenta = idSeparacionVenta
                        resultadoSeparacionPagosSaldo = RseparacionVentaDetallePagos.AñadirSeparacion(descEmpresa, pd)
                    End If
                Next

                If pSeguimientoCreditoHip IsNot Nothing Then
                    pSeguimientoCreditoHip.idSeparacionVenta = idSeparacionVenta
                    Dim resultadoSeguimientoCreHip As Boolean = RseguimientoCreditoHip.EditarInstanciasCreditoHip(descEmpresa, pSeguimientoCreditoHip)
                End If

                If resultadoSeparacionPagosCtaInicial AndAlso resultadoSeparacionPagosSaldo Then resultado = True

                scope.Complete()
            Catch ex As Exception
                Throw
            End Try
        End Using

        Return resultado
    End Function

    Public Shared Function AñadirSeparacionTemporal(ByVal descEmpresa As String, _
                                                    ByVal pCliente As Ecliente, _
                                                    ByVal pApoderado As Ecliente, _
                                                    ByVal pConyugue As Ecliente, _
                                                    ByRef idSeparacionVenta As Integer, _
                                                    ByVal pSeparacionVenta As EseparacionVenta, _
                                                    ByVal pSeparacionVentaDetalle As List(Of EseparacionVentaDetalle), _
                                                    ByVal pAhorroPrevios As List(Of EahorroPrevio), _
                                                    ByVal pFinanciamineoCtaInicial As List(Of EseparacionVentaDetallePagos), _
                                                    ByVal pFinanciamineoSaldo As List(Of EseparacionVentaDetallePagos), _
                                                    ByVal pSeguimientoCreditoHip As EseguimientoCreditoHip, _
                                                    ByVal pCoopropietario As List(Of Ecliente), _
                                                    ByVal pRepresentante As List(Of Ecliente), _
                                                    ByRef codigoGenerado As String) As Boolean
        Dim resultado As Boolean = False

        Dim options As New TransactionOptions
        options.IsolationLevel = Transactions.IsolationLevel.ReadCommitted
        options.Timeout = New TimeSpan(0, 2, 0)

        Using scope As New TransactionScope(TransactionScopeOption.Required, options)
            Try
                Dim idCliente As Int32 = 0
                Dim resultadoCliente As Boolean = Rcliente.AñadirTemporal(descEmpresa, pCliente, idCliente)

                Dim idApoderado As Int32 = 0
                If Not pApoderado Is Nothing Then
                    Dim resultadoApoderado As Boolean = Rcliente.AñadirApoderadoTemporal(descEmpresa, pApoderado, idApoderado, idCliente)
                End If

                Dim idConyugue As Int32 = 0
                If Not pConyugue Is Nothing Then
                    Dim resultadoConyugue As Boolean = Rcliente.AñadirConyugueTemporal(descEmpresa, pConyugue, idConyugue, idCliente)
                End If

                Dim grabaCoopropietario As Boolean = False
                If Not pCoopropietario Is Nothing Then
                    For Each pc As Ecliente In pCoopropietario
                        Dim idCoopropietario As Int32 = 0
                        'pc.idRelacion = idCliente
                        grabaCoopropietario = Rcliente.AñadirCoopropietarioTemp(descEmpresa, pc, idCoopropietario, idCliente)
                    Next
                End If

                Dim grabaRepresentante As Boolean = False
                If Not pRepresentante Is Nothing Then
                    For Each pr As Ecliente In pRepresentante
                        Dim idRepresentante As Int32 = 0
                        'pc.idRelacion = idCliente
                        grabaRepresentante = Rcliente.AñadirRepresentanteTemp(descEmpresa, pr, idRepresentante, idCliente)
                    Next
                End If

                pSeparacionVenta.Ecliente = New Ecliente
                'pSeparacionVenta.idCliente = idCliente
                pSeparacionVenta.nroDocumento = pCliente.nroDocumento
                Dim resultadoSeparacion As Boolean = RseparacionVenta.AñadirSeparacionTemporal(descEmpresa, pSeparacionVenta, idSeparacionVenta)

                Dim resultadoSeparacionDetalle As Boolean = False
                For Each pd As EseparacionVentaDetalle In pSeparacionVentaDetalle
                    pd.idSeparacionVenta = idSeparacionVenta
                    resultadoSeparacionDetalle = RseparacionVentaDetalle.AñadirSeparacionTemporal(descEmpresa, pd, codigoGenerado)
                Next

                Dim resultadoSeparacionAhorroPrevio As Boolean = False
                If Not pAhorroPrevios Is Nothing Then
                    For Each pd As EahorroPrevio In pAhorroPrevios
                        pd.idSeparacionVenta = idSeparacionVenta
                        resultadoSeparacionAhorroPrevio = RahorroPrevio.AñadirTemporal(descEmpresa, pd)
                    Next
                End If

                Dim resultadoSeparacionPagosCtaInicial As Boolean = False
                Dim TotalMontoI As Double = 0.0
                For Each pd0 As EseparacionVentaDetallePagos In pFinanciamineoCtaInicial
                    TotalMontoI = TotalMontoI + pd0.cuota
                Next
                For Each pd As EseparacionVentaDetallePagos In pFinanciamineoCtaInicial
                    If pd.idMotivo = 1 Then
                        'If pd.montoPago = TotalMontoI Then '** Codigo para comprobar si el Monto de pago es igual a la suma de cuotas
                        If Math.Abs(pd.montoPago - TotalMontoI) < 0.01 Then '** Codigo para comprobar si el Monto de pago es igual a la suma de cuotas
                            pd.idSeparacionVenta = idSeparacionVenta
                            resultadoSeparacionPagosCtaInicial = RseparacionVentaDetallePagos.AñadirSeparacionTemporal(descEmpresa, pd)
                        Else
                            pFinanciamineoCtaInicial = Nothing
                            For Each pds As EseparacionVentaDetallePagos In pFinanciamineoCtaInicial

                            Next
                        End If
                    End If
                Next

                Dim resultadoSeparacionPagosSaldo As Boolean = False
                Dim TotalMontoF As Double = 0.0
                For Each pd0 As EseparacionVentaDetallePagos In pFinanciamineoSaldo
                    TotalMontoF = TotalMontoF + pd0.cuota
                Next
                For Each pd As EseparacionVentaDetallePagos In pFinanciamineoSaldo
                    If pd.idMotivo = 2 Then
                        'If pd.montoPago = TotalMontoF Then '** Codigo para comprobar si el Monto de pago es igual a la suma de cuotas
                        If Math.Abs(pd.montoPago - TotalMontoF) < 0.01 Then '** Codigo para comprobar si el Monto de pago es igual a la suma de cuotas
                            pd.idSeparacionVenta = idSeparacionVenta
                            resultadoSeparacionPagosSaldo = RseparacionVentaDetallePagos.AñadirSeparacionTemporal(descEmpresa, pd)
                        Else
                            pFinanciamineoSaldo = Nothing
                            For Each pds As EseparacionVentaDetallePagos In pFinanciamineoSaldo

                            Next
                        End If

                    End If
                Next

                If pSeguimientoCreditoHip IsNot Nothing Then
                    pSeguimientoCreditoHip.idSeparacionVenta = idSeparacionVenta
                    Dim resultadoSeguimientoCreHip As Boolean = RseguimientoCreditoHip.EditarInstanciasCreditoHipTemp(descEmpresa, pSeguimientoCreditoHip)
                End If

                'resultadoSeparacionAhorroPrevio AndAlso _
                If resultadoCliente AndAlso _
                   resultadoSeparacion AndAlso _
                   resultadoSeparacionDetalle AndAlso _
                   resultadoSeparacionPagosCtaInicial AndAlso _
                   resultadoSeparacionPagosSaldo Then resultado = True

                scope.Complete()
            Catch ex As Exception
                Throw
            End Try
        End Using

        Return resultado
    End Function
    Public Shared Function EditarSeparacionTemporal(ByVal descEmpresa As String, _
                                                    ByRef idSeparacionVenta As Integer, _
                                                    ByVal pSeparacionVenta As EseparacionVenta, _
                                                    ByVal pSeparacionVentaDetalle As List(Of EseparacionVentaDetalle), _
                                                    ByVal pAhorroPrevios As List(Of EahorroPrevio), _
                                                    ByRef pSeparacionVentaPagos As EseparacionVentaDetallePagos, _
                                                    ByVal pFinanciamineoCtaInicial As List(Of EseparacionVentaDetallePagos), _
                                                    ByVal pFinanciamineoSaldo As List(Of EseparacionVentaDetallePagos), _
                                                    ByVal pSeguimientoCreditoHip As EseguimientoCreditoHip) As Boolean
        Dim resultado As Boolean = False

        Dim options As New TransactionOptions
        options.IsolationLevel = Transactions.IsolationLevel.ReadCommitted
        options.Timeout = New TimeSpan(0, 2, 0)

        Using scope As New TransactionScope(TransactionScopeOption.Required, options)
            Try
                Dim resultadoSeparacion As Boolean = RseparacionVenta.EditarSeparacionTemporal(descEmpresa, idSeparacionVenta, pSeparacionVenta)

                Dim resultadoSeparacionDetalle As Boolean = False
                For Each pd As EseparacionVentaDetalle In pSeparacionVentaDetalle
                    pd.idSeparacionVenta = idSeparacionVenta
                    resultadoSeparacionDetalle = RseparacionVentaDetalle.EditarTemporal(descEmpresa, pd)
                Next

                Dim resultadoSeparacionAhorroPrevio As Boolean = False
                If Not pAhorroPrevios Is Nothing Then
                    RahorroPrevio.Eliminar(descEmpresa, idSeparacionVenta, pAhorroPrevios.ElementAt(0))
                    For Each pd As EahorroPrevio In pAhorroPrevios
                        pd.idSeparacionVenta = idSeparacionVenta
                        resultadoSeparacionAhorroPrevio = RahorroPrevio.AñadirTemporal(descEmpresa, pd)
                    Next
                End If

                RseparacionVentaDetallePagos.Eliminar(descEmpresa, pSeparacionVentaPagos)
                Dim resultadoSeparacionPagosCtaInicial As Boolean = False
                For Each pd As EseparacionVentaDetallePagos In pFinanciamineoCtaInicial
                    If pd.idMotivo = 1 Then
                        pd.idSeparacionVenta = idSeparacionVenta
                        resultadoSeparacionPagosCtaInicial = RseparacionVentaDetallePagos.AñadirSeparacionTemporal(descEmpresa, pd)
                    End If
                Next

                Dim resultadoSeparacionPagosSaldo As Boolean = False
                For Each pd As EseparacionVentaDetallePagos In pFinanciamineoSaldo
                    If pd.idMotivo = 2 Then
                        pd.idSeparacionVenta = idSeparacionVenta
                        resultadoSeparacionPagosSaldo = RseparacionVentaDetallePagos.AñadirSeparacionTemporal(descEmpresa, pd)
                    End If
                Next

                If pSeguimientoCreditoHip IsNot Nothing Then
                    pSeguimientoCreditoHip.idSeparacionVenta = idSeparacionVenta
                    Dim resultadoSeguimientoCreHip As Boolean = RseguimientoCreditoHip.EditarInstanciasCreditoHipTemp(descEmpresa, pSeguimientoCreditoHip)
                End If

                If resultadoSeparacionPagosCtaInicial AndAlso resultadoSeparacionPagosSaldo Then resultado = True

                scope.Complete()
            Catch ex As Exception
                Throw
            End Try
        End Using

        Return resultado
    End Function

    'Public Shared Function AñadirVenta(ByVal descEmpresa As String, _
    '                                   ByVal pCliente As Ecliente, _
    '                                   ByVal pApoderado As Ecliente, _
    '                                   ByVal pConyugue As Ecliente, _
    '                                   ByRef idSeparacionVenta As Integer, _
    '                                   ByVal pSeparacionVenta As EseparacionVenta, _
    '                                   ByVal pSeparacionVentaDetalle As List(Of EseparacionVentaDetalle), _
    '                                   ByVal pAhorroPrevios As List(Of EahorroPrevio), _
    '                                   ByVal pFinanciamineoCtaInicial As List(Of EseparacionVentaDetallePagos), _
    '                                   ByVal pFinanciamineoSaldo As List(Of EseparacionVentaDetallePagos), _
    '                                   ByVal pSeguimientoCreditoHip As EseguimientoCreditoHip, _
    '                                   ByVal pCoopropietario As List(Of Ecliente), _
    '                                   ByVal pRepresentante As List(Of Ecliente), _
    '                                   ByVal CodigoSeparacion As String) As Boolean
    '    Dim resultado As Boolean = False

    '    Dim options As New TransactionOptions
    '    options.IsolationLevel = Transactions.IsolationLevel.ReadCommitted
    '    options.Timeout = New TimeSpan(0, 2, 0)

    '    Using scope As New TransactionScope(TransactionScopeOption.Required, options)
    '        Try
    '            Dim idCliente As Int32 = 0
    '            Dim resultadoCliente As Boolean = Rcliente.Añadir(descEmpresa, pCliente, idCliente)

    '            Dim idApoderado As Int32 = 0
    '            If Not pApoderado Is Nothing Then
    '                Dim resultadoApoderado As Boolean = Rcliente.AñadirApoderado(descEmpresa, pApoderado, idApoderado, idCliente)
    '            End If

    '            Dim idConyugue As Int32 = 0
    '            If Not pConyugue Is Nothing Then
    '                Dim resultadoConyugue As Boolean = Rcliente.AñadirConyugue(descEmpresa, pConyugue, idConyugue, idCliente)
    '            End If

    '            pSeparacionVenta.Ecliente = New Ecliente
    '            'pSeparacionVenta.idCliente = idCliente
    '            pSeparacionVenta.nroDocumento = pCliente.nroDocumento
    '            Dim resultadoSeparacion As Boolean = RseparacionVenta.AñadirVenta(descEmpresa, pSeparacionVenta, idSeparacionVenta, CodigoSeparacion)

    '            Dim resultadoSeparacionDetalle As Boolean = False
    '            For Each pd As EseparacionVentaDetalle In pSeparacionVentaDetalle
    '                pd.idSeparacionVenta = idSeparacionVenta
    '                resultadoSeparacionDetalle = RseparacionVentaDetalle.AñadirVenta(descEmpresa, pd)
    '            Next

    '            Dim resultadoSeparacionAhorroPrevio As Boolean = False
    '            If Not pAhorroPrevios Is Nothing Then
    '                For Each pd As EahorroPrevio In pAhorroPrevios
    '                    pd.idSeparacionVenta = idSeparacionVenta
    '                    resultadoSeparacionAhorroPrevio = RahorroPrevio.Añadir(descEmpresa, pd)
    '                Next
    '            End If

    '            Dim resultadoSeparacionPagosCtaInicial As Boolean = False
    '            Dim TotalMontoI As Double = 0.0
    '            For Each pd0 As EseparacionVentaDetallePagos In pFinanciamineoCtaInicial
    '                TotalMontoI = TotalMontoI + pd0.cuota
    '            Next
    '            For Each pd As EseparacionVentaDetallePagos In pFinanciamineoCtaInicial
    '                'pd.idSeparacionVenta = idSeparacionVenta
    '                'resultadoSeparacionPagosCtaInicial = RseparacionVentaDetallePagos.AñadirVenta(descEmpresa, pd)
    '                'If pd.montoPago = pd.cuota * pFinanciamineoCtaInicial.Count Then '** Codigo para comprobar si el Monto de pago es igual a la suma de cuotas
    '                'If pd.montoPago = TotalMontoI Then '** Codigo para comprobar si el Monto de pago es igual a la suma de cuotas
    '                If Math.Abs(pd.montoPago - TotalMontoI) < 0.01 Then '** Codigo para comprobar si el Monto de pago es igual a la suma de cuotas
    '                    pd.idSeparacionVenta = idSeparacionVenta
    '                    resultadoSeparacionPagosCtaInicial = RseparacionVentaDetallePagos.AñadirVenta(descEmpresa, pd)
    '                Else
    '                    pFinanciamineoSaldo = Nothing
    '                    For Each pds As EseparacionVentaDetallePagos In pFinanciamineoCtaInicial

    '                    Next
    '                End If
    '            Next


    '            Dim resultadoSeparacionPagosSaldo As Boolean = False
    '            Dim TotalMontoF As Double = 0.0
    '            For Each pd0 As EseparacionVentaDetallePagos In pFinanciamineoSaldo
    '                TotalMontoF = TotalMontoF + pd0.cuota
    '            Next
    '            For Each pd As EseparacionVentaDetallePagos In pFinanciamineoSaldo
    '                'If pd.montoPago = TotalMontoF Then '** Codigo para comprobar si el Monto de pago es igual a la suma de cuotas
    '                If Math.Abs(pd.montoPago - TotalMontoF) < 0.01 Then '** Codigo para comprobar si el Monto de pago es igual a la suma de cuotas
    '                    pd.idSeparacionVenta = idSeparacionVenta
    '                    resultadoSeparacionPagosSaldo = RseparacionVentaDetallePagos.AñadirVenta(descEmpresa, pd)
    '                Else
    '                    pFinanciamineoSaldo = Nothing
    '                    For Each pds As EseparacionVentaDetallePagos In pFinanciamineoSaldo

    '                    Next
    '                End If
    '            Next
    '            If pSeguimientoCreditoHip IsNot Nothing Then
    '                pSeguimientoCreditoHip.idSeparacionVenta = idSeparacionVenta
    '                Dim resultadoSeguimientoCreHip As Boolean = RseguimientoCreditoHip.EditarInstanciasCreditoHip(descEmpresa, pSeguimientoCreditoHip)
    '            End If

    '            'resultadoSeparacionAhorroPrevio AndAlso _
    '            If resultadoCliente AndAlso _
    '               resultadoSeparacion AndAlso _
    '               resultadoSeparacionDetalle AndAlso _
    '               resultadoSeparacionPagosCtaInicial AndAlso _
    '               resultadoSeparacionPagosSaldo Then resultado = True

    '            scope.Complete()
    '        Catch ex As Exception
    '            Throw
    '        End Try
    '    End Using

    '    Return resultado
    'End Function
    Public Shared Function ConvertirSeparacionVenta(ByVal descEmpresa As String, _
                                                    ByRef idSeparacionVenta As Integer, _
                                                    ByVal pSeparacionVenta As EseparacionVenta, _
                                                    ByVal pSeparacionVentaDetalle As List(Of EseparacionVentaDetalle), _
                                                    ByVal pAhorroPrevios As List(Of EahorroPrevio), _
                                                    ByRef pSeparacionVentaPagos As EseparacionVentaDetallePagos, _
                                                    ByVal pFinanciamineoCtaInicial As List(Of EseparacionVentaDetallePagos), _
                                                    ByVal pFinanciamineoSaldo As List(Of EseparacionVentaDetallePagos), _
                                                    ByVal pSeguimientoCreditoHip As EseguimientoCreditoHip) As Boolean
        Dim resultado As Boolean = False
        Dim options As New TransactionOptions
        options.IsolationLevel = Transactions.IsolationLevel.ReadCommitted
        options.Timeout = New TimeSpan(0, 2, 0)

        Using scope As New TransactionScope(TransactionScopeOption.Required, options)
            Try
                '            Dim resultadoSeparacion As Boolean = RseparacionVenta.EditarVenta(descEmpresa, idSeparacionVenta, pSeparacionVenta)
                Dim resultadoSeparacion As Boolean = RseparacionVenta.ConvertirSeparacionVenta(descEmpresa, idSeparacionVenta, pSeparacionVenta)

                'RseparacionVentaDetalle.EditarConvertirSeparacionVenta(descEmpresa, pSeparacionVentaDetalle)
                Dim resultadoSeparacionDetalle As Boolean = False
                For Each pd As EseparacionVentaDetalle In pSeparacionVentaDetalle
                    pd.idSeparacionVenta = idSeparacionVenta
                    pd.tpoGestion = 2
                    resultadoSeparacionDetalle = RseparacionVentaDetalle.EditarConvertirSeparacionVenta(descEmpresa, pd)
                Next

                Dim resultadoSeparacionAhorroPrevio As Boolean = False
                If Not pAhorroPrevios Is Nothing Then
                    RahorroPrevio.Eliminar(descEmpresa, idSeparacionVenta, pAhorroPrevios.ElementAt(0))
                    For Each pd As EahorroPrevio In pAhorroPrevios
                        pd.idSeparacionVenta = idSeparacionVenta
                        resultadoSeparacionAhorroPrevio = RahorroPrevio.Añadir(descEmpresa, pd)
                    Next
                End If

                RseparacionVentaDetallePagos.Eliminar(descEmpresa, pSeparacionVentaPagos)

                Dim resultadoSeparacionPagosCtaInicial As Boolean = False
                Dim TotalMontoI As Double = 0.0
                For Each pd0 As EseparacionVentaDetallePagos In pFinanciamineoCtaInicial
                    TotalMontoI = TotalMontoI + pd0.cuota
                Next
                For Each pd As EseparacionVentaDetallePagos In pFinanciamineoCtaInicial
                    If pd.idMotivo = 1 Then
                        'If pd.montoPago = TotalMontoI Then
                        If Math.Abs(pd.montoPago - TotalMontoI) < 0.01 Then '** Codigo para comprobar si el Monto de pago es igual a la suma de cuotas
                            pd.idSeparacionVenta = idSeparacionVenta
                            resultadoSeparacionPagosCtaInicial = RseparacionVentaDetallePagos.AñadirVenta(descEmpresa, pd)
                        Else
                            pFinanciamineoCtaInicial = Nothing
                            For Each pds As EseparacionVentaDetallePagos In pFinanciamineoCtaInicial

                            Next
                        End If

                    End If
                Next

                Dim resultadoSeparacionPagosSaldo As Boolean = False
                Dim TotalMontoF As Double = 0.0
                For Each pd0 As EseparacionVentaDetallePagos In pFinanciamineoSaldo
                    TotalMontoF = TotalMontoF + pd0.cuota
                Next
                For Each pd As EseparacionVentaDetallePagos In pFinanciamineoSaldo
                    If pd.idMotivo = 2 Then
                        'If pd.montoPago = TotalMontoF Then
                        If Math.Abs(pd.montoPago - TotalMontoF) < 0.01 Then '** Codigo para comprobar si el Monto de pago es igual a la suma de cuotas
                            pd.idSeparacionVenta = idSeparacionVenta
                            resultadoSeparacionPagosSaldo = RseparacionVentaDetallePagos.AñadirVenta(descEmpresa, pd)
                        Else
                            pFinanciamineoSaldo = Nothing
                            For Each pds As EseparacionVentaDetallePagos In pFinanciamineoSaldo
                            Next
                        End If
                    End If
                Next

                If pSeguimientoCreditoHip IsNot Nothing Then
                    pSeguimientoCreditoHip.idSeparacionVenta = idSeparacionVenta
                    Dim resultadoSeguimientoCreHip As Boolean = RseguimientoCreditoHip.EditarInstanciasCreditoHip(descEmpresa, pSeguimientoCreditoHip)
                End If

                If resultadoSeparacionPagosCtaInicial AndAlso resultadoSeparacionPagosSaldo Then resultado = True

                scope.Complete()
            Catch ex As Exception
                Throw
            End Try
        End Using

        Return resultado
    End Function
    Public Shared Function Preminuta(ByVal descEmpresa As String, ByVal pSeparacionVenta As EseparacionVenta)
        Dim resultado As Boolean = False
        Dim options As New TransactionOptions
        options.IsolationLevel = Transactions.IsolationLevel.ReadCommitted
        options.Timeout = New TimeSpan(0, 2, 0)

        Using scope As New TransactionScope(TransactionScopeOption.Required, options)
            Try
                resultado = RseparacionVenta.Preminuta(descEmpresa, pSeparacionVenta)
            Catch ex As Exception
                Throw
            End Try
        End Using

        Return resultado

    End Function
    Public Shared Function EditarVenta(ByVal descEmpresa As String, _
                                       ByRef idSeparacionVenta As Integer, _
                                       ByVal pSeparacionVenta As EseparacionVenta, _
                                       ByVal pSeparacionVentaDetalle As List(Of EseparacionVentaDetalle), _
                                       ByVal pAhorroPrevios As List(Of EahorroPrevio), _
                                       ByRef pSeparacionVentaPagos As EseparacionVentaDetallePagos, _
                                       ByVal pFinanciamineoCtaInicial As List(Of EseparacionVentaDetallePagos), _
                                       ByVal pFinanciamineoSaldo As List(Of EseparacionVentaDetallePagos), _
                                       ByVal pSeguimientoCreditoHip As EseguimientoCreditoHip) As Boolean
        Dim resultado As Boolean = False

        Dim options As New TransactionOptions
        options.IsolationLevel = Transactions.IsolationLevel.ReadCommitted
        options.Timeout = New TimeSpan(0, 2, 0)

        Using scope As New TransactionScope(TransactionScopeOption.Required, options)
            Try
                Dim resultadoSeparacion As Boolean = RseparacionVenta.EditarVenta(descEmpresa, idSeparacionVenta, pSeparacionVenta)

                Dim resultadoSeparacionDetalle As Boolean = False
                For Each pd As EseparacionVentaDetalle In pSeparacionVentaDetalle
                    pd.idSeparacionVenta = idSeparacionVenta
                    pd.tpoGestion = 2
                    resultadoSeparacionDetalle = RseparacionVentaDetalle.Editar(descEmpresa, pd)
                Next

                Dim resultadoSeparacionAhorroPrevio As Boolean = False
                If Not pAhorroPrevios Is Nothing Then
                    RahorroPrevio.Eliminar(descEmpresa, idSeparacionVenta, pAhorroPrevios.ElementAt(0))
                    For Each pd As EahorroPrevio In pAhorroPrevios
                        pd.idSeparacionVenta = idSeparacionVenta
                        resultadoSeparacionAhorroPrevio = RahorroPrevio.Añadir(descEmpresa, pd)
                    Next
                End If

                RseparacionVentaDetallePagos.Eliminar(descEmpresa, pSeparacionVentaPagos)
                Dim resultadoSeparacionPagosCtaInicial As Boolean = False
                Dim TotalMontoI As Double = 0.0
                For Each pd0 As EseparacionVentaDetallePagos In pFinanciamineoCtaInicial
                    TotalMontoI = TotalMontoI + pd0.cuota
                Next
                For Each pd As EseparacionVentaDetallePagos In pFinanciamineoCtaInicial
                    If pd.idMotivo = 1 Then
                        'If pd.montoPago = TotalMontoI Then '** Codigo para comprobar si el Monto de pago es igual a la suma de cuotas
                        If Math.Abs(pd.montoPago - TotalMontoI) < 0.01 Then '** Codigo para comprobar si el Monto de pago es igual a la suma de cuotas
                            pd.idSeparacionVenta = idSeparacionVenta
                            resultadoSeparacionPagosCtaInicial = RseparacionVentaDetallePagos.AñadirVenta(descEmpresa, pd)
                        Else
                            pFinanciamineoCtaInicial = Nothing
                            For Each pds As EseparacionVentaDetallePagos In pFinanciamineoCtaInicial

                            Next
                        End If
                    End If
                Next

                Dim resultadoSeparacionPagosSaldo As Boolean = False
                Dim TotalMontoF As Double = 0.0
                For Each pd0 As EseparacionVentaDetallePagos In pFinanciamineoSaldo
                    TotalMontoF = TotalMontoF + pd0.cuota
                Next
                For Each pd As EseparacionVentaDetallePagos In pFinanciamineoSaldo
                    If pd.idMotivo = 2 Then
                        'If pd.montoPago = TotalMontoF Then
                        If Math.Abs(pd.montoPago - TotalMontoF) < 0.01 Then '** Codigo para comprobar si el Monto de pago es igual a la suma de cuotas
                            pd.idSeparacionVenta = idSeparacionVenta
                            resultadoSeparacionPagosSaldo = RseparacionVentaDetallePagos.AñadirVenta(descEmpresa, pd)
                        Else
                            pFinanciamineoSaldo = Nothing
                            For Each pds As EseparacionVentaDetallePagos In pFinanciamineoSaldo

                            Next
                        End If
                    End If
                Next

                If pSeguimientoCreditoHip IsNot Nothing Then
                    pSeguimientoCreditoHip.idSeparacionVenta = idSeparacionVenta
                    Dim resultadoSeguimientoCreHip As Boolean = RseguimientoCreditoHip.EditarInstanciasCreditoHip(descEmpresa, pSeguimientoCreditoHip)
                End If

                If resultadoSeparacionPagosCtaInicial AndAlso resultadoSeparacionPagosSaldo Then resultado = True

                scope.Complete()
            Catch ex As Exception
                Throw
            End Try
        End Using

        Return resultado
    End Function

    '********* ELIMINAR: CUANDO SE UPLOAD VENTAS **********
    Public Shared Function AñadirVenta(ByVal descEmpresa As String, _
                                      ByVal pCliente As Ecliente, _
                                      ByVal pApoderado As Ecliente, _
                                      ByVal pConyugue As Ecliente, _
                                      ByRef idSeparacionVenta As Integer, _
                                      ByVal pSeparacionVenta As EseparacionVenta, _
                                      ByVal pSeparacionVentaDetalle As List(Of EseparacionVentaDetalle), _
                                      ByVal pAhorroPrevios As List(Of EahorroPrevio), _
                                      ByVal pFinanciamineoCtaInicial As List(Of EseparacionVentaDetallePagos), _
                                      ByVal pFinanciamineoSaldo As List(Of EseparacionVentaDetallePagos), _
                                      ByVal pSeguimientoCreditoHip As EseguimientoCreditoHip, _
                                      ByVal pCoopropietario As List(Of Ecliente), _
                                      ByVal pRepresentante As List(Of Ecliente), _
                                      ByVal CodigoSeparacion As String) As Boolean
        Dim resultado As Boolean = False

        Dim options As New TransactionOptions
        options.IsolationLevel = Transactions.IsolationLevel.ReadCommitted
        options.Timeout = New TimeSpan(0, 2, 0)

        Using scope As New TransactionScope(TransactionScopeOption.Required, options)
            Try
                Dim idCliente As Int32 = 0
                Dim resultadoCliente As Boolean = Rcliente.Añadir(descEmpresa, pCliente, idCliente)

                Dim idApoderado As Int32 = 0
                If Not pApoderado Is Nothing Then
                    Dim resultadoApoderado As Boolean = Rcliente.AñadirApoderado(descEmpresa, pApoderado, idApoderado, idCliente)
                End If

                Dim idConyugue As Int32 = 0
                If Not pConyugue Is Nothing Then
                    Dim resultadoConyugue As Boolean = Rcliente.AñadirConyugue(descEmpresa, pConyugue, idConyugue, idCliente)
                End If

                Dim grabaCoopropietario As Boolean = False
                If Not pCoopropietario Is Nothing Then
                    For Each pc As Ecliente In pCoopropietario
                        Dim idCoopropietario As Int32 = 0
                        'pc.idRelacion = idCliente
                        grabaCoopropietario = Rcliente.AñadirCoopropietario(descEmpresa, pc, idCoopropietario, idCliente)
                    Next
                End If

                Dim grabaRepresentante As Boolean = False
                If Not pRepresentante Is Nothing Then
                    For Each pr As Ecliente In pRepresentante
                        Dim idRepresentante As Int32 = 0
                        'pc.idRelacion = idCliente
                        grabaRepresentante = Rcliente.AñadirRepresentante(descEmpresa, pr, idRepresentante, idCliente)
                    Next
                End If

                pSeparacionVenta.Ecliente = New Ecliente
                'pSeparacionVenta.idCliente = idCliente
                pSeparacionVenta.nroDocumento = pCliente.nroDocumento
                Dim resultadoSeparacion As Boolean = RseparacionVenta.AñadirVenta(descEmpresa, pSeparacionVenta, idSeparacionVenta, CodigoSeparacion)

                Dim resultadoSeparacionDetalle As Boolean = False
                For Each pd As EseparacionVentaDetalle In pSeparacionVentaDetalle
                    pd.idSeparacionVenta = idSeparacionVenta
                    resultadoSeparacionDetalle = RseparacionVentaDetalle.AñadirVenta(descEmpresa, pd)
                Next

                Dim resultadoSeparacionAhorroPrevio As Boolean = False
                If Not pAhorroPrevios Is Nothing Then
                    For Each pd As EahorroPrevio In pAhorroPrevios
                        pd.idSeparacionVenta = idSeparacionVenta
                        resultadoSeparacionAhorroPrevio = RahorroPrevio.Añadir(descEmpresa, pd)
                    Next
                End If

                Dim resultadoSeparacionPagosCtaInicial As Boolean = False
                For Each pd As EseparacionVentaDetallePagos In pFinanciamineoCtaInicial
                    pd.idSeparacionVenta = idSeparacionVenta
                    resultadoSeparacionPagosCtaInicial = RseparacionVentaDetallePagos.AñadirVenta(descEmpresa, pd)
                Next


                Dim resultadoSeparacionPagosSaldo As Boolean = False
                For Each pd As EseparacionVentaDetallePagos In pFinanciamineoSaldo
                    pd.idSeparacionVenta = idSeparacionVenta
                    resultadoSeparacionPagosSaldo = RseparacionVentaDetallePagos.AñadirVenta(descEmpresa, pd)
                Next

                'resultadoSeparacionAhorroPrevio AndAlso _
                If resultadoCliente AndAlso _
                   resultadoSeparacion AndAlso _
                   resultadoSeparacionDetalle AndAlso _
                   resultadoSeparacionPagosCtaInicial AndAlso _
                   resultadoSeparacionPagosSaldo Then resultado = True

                scope.Complete()
            Catch ex As Exception
                Throw
            End Try
        End Using

        Return resultado
    End Function
    Public Shared Function ConvertirSeparacionVenta(ByVal descEmpresa As String, _
                                                    ByRef idSeparacionVenta As Integer, _
                                                    ByVal pSeparacionVenta As EseparacionVenta, _
                                                    ByVal pSeparacionVentaDetalle As EseparacionVentaDetalle, _
                                                    ByRef pSeparacionVentaPagos As EseparacionVentaDetallePagos, _
                                                    ByVal pFinanciamineoCtaInicial As List(Of EseparacionVentaDetallePagos), _
                                                    ByVal pFinanciamineoSaldo As List(Of EseparacionVentaDetallePagos)) As Boolean
        Dim resultado As Boolean = False

        Dim options As New TransactionOptions
        options.IsolationLevel = Transactions.IsolationLevel.ReadCommitted
        options.Timeout = New TimeSpan(0, 2, 0)

        Using scope As New TransactionScope(TransactionScopeOption.Required, options)
            Try
                RseparacionVenta.Editar(descEmpresa, pSeparacionVenta)
                RseparacionVentaDetalle.EditarConvertirSeparacionVenta(descEmpresa, pSeparacionVentaDetalle)
                RseparacionVentaDetallePagos.Eliminar(descEmpresa, pSeparacionVentaPagos)

                Dim resultadoSeparacionPagosCtaInicial As Boolean = False
                For Each pd As EseparacionVentaDetallePagos In pFinanciamineoCtaInicial
                    If pd.idMotivo = 1 Then
                        pd.idSeparacionVenta = idSeparacionVenta
                        resultadoSeparacionPagosCtaInicial = RseparacionVentaDetallePagos.AñadirVenta(descEmpresa, pd)
                    End If
                Next

                Dim resultadoSeparacionPagosSaldo As Boolean = False
                For Each pd As EseparacionVentaDetallePagos In pFinanciamineoSaldo
                    If pd.idMotivo = 2 Then
                        pd.idSeparacionVenta = idSeparacionVenta
                        resultadoSeparacionPagosSaldo = RseparacionVentaDetallePagos.AñadirVenta(descEmpresa, pd)
                    End If
                Next

                If resultadoSeparacionPagosCtaInicial AndAlso resultadoSeparacionPagosSaldo Then resultado = True

                scope.Complete()
            Catch ex As Exception
                Throw
            End Try
        End Using

        Return resultado
    End Function
    Public Shared Function EditarVenta(ByVal descEmpresa As String, _
                                       ByRef idSeparacionVenta As Integer, _
                                       ByRef pSeparacionVentaPagos As EseparacionVentaDetallePagos, _
                                       ByVal pFinanciamineoCtaInicial As List(Of EseparacionVentaDetallePagos), _
                                       ByVal pFinanciamineoSaldo As List(Of EseparacionVentaDetallePagos)) As Boolean
        Dim resultado As Boolean = False

        Dim options As New TransactionOptions
        options.IsolationLevel = Transactions.IsolationLevel.ReadCommitted
        options.Timeout = New TimeSpan(0, 2, 0)

        Using scope As New TransactionScope(TransactionScopeOption.Required, options)
            Try
                RseparacionVentaDetallePagos.Eliminar(descEmpresa, pSeparacionVentaPagos)

                Dim resultadoSeparacionPagosCtaInicial As Boolean = False
                For Each pd As EseparacionVentaDetallePagos In pFinanciamineoCtaInicial
                    If pd.idMotivo = 1 Then
                        pd.idSeparacionVenta = idSeparacionVenta
                        resultadoSeparacionPagosCtaInicial = RseparacionVentaDetallePagos.AñadirVenta(descEmpresa, pd)
                    End If
                Next

                Dim resultadoSeparacionPagosSaldo As Boolean = False
                For Each pd As EseparacionVentaDetallePagos In pFinanciamineoSaldo
                    If pd.idMotivo = 2 Then
                        pd.idSeparacionVenta = idSeparacionVenta
                        resultadoSeparacionPagosSaldo = RseparacionVentaDetallePagos.AñadirVenta(descEmpresa, pd)
                    End If
                Next

                If resultadoSeparacionPagosCtaInicial AndAlso resultadoSeparacionPagosSaldo Then resultado = True

                scope.Complete()
            Catch ex As Exception
                Throw
            End Try
        End Using

        Return resultado
    End Function

End Class
